广告位维度服务端奖励校验
简介
开发者可通过服务器到服务器回调结果来判定是否提供奖励给观看广告的用户。当用户看广告达到奖励条件时,可在媒体平台配置从平台服务器到您自己的服务器的回调链接,以通知您用户完成了操作。
注意事项
开启聚合维度服务端验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题。
示例代码
- (void)rewardedVideoAdServerRewardDidSucceed:(CloooudRewardedVideoAd *)rewardedVideoAd verify:(BOOL)verify {
NSLog(@"%s",__func__);
NSLog(@"verify-%@",verify?@"true":@"false");
NSLog(@"rewardInfo.userId-%@",self.rewardedVideoAd.rewardedVideoModel.userId);
NSLog(@"rewardInfo.rewardName-%@",self.rewardedVideoAd.rewardedVideoModel.rewardName);
NSLog(@"rewardInfo.rewardAmount-%ld",(long)self.rewardedVideoAd.rewardedVideoModel.rewardAmount);
NSLog(@"rewardInfo.rewardId-%@",self.rewardedVideoAd.rewardedVideoModel.mediation.rewardId);
NSLog(@"rewardInfo.tradeId-%@",self.rewardedVideoAd.rewardedVideoModel.mediation.tradeId);
NSLog(@"rewardInfo.adnName-%@",self.rewardedVideoAd.rewardedVideoModel.mediation.adnName);
}
是否开启聚合维度奖励发放结果通过如下结果通知:
NSLog(@"rewardInfo verifyByCloooudS2S-%@",self.rewardedVideoAd.rewardedVideoModel.mediation.verifyByCloooudS2S?@"true":@"false");
服务端数据说明
聚合会以 GET方式请求开发者的回调URL,并拼接参数回传,开发者的回调URL。
https://www.cloooud.com/reward/callback?user_id=1234&trans_id=qwerfdas&reward_amount=100&reward_name=rmb&prime_rit=900000000&sign=sign:ebdc5645bc6245819fec2324789a363865272926cd0f8e4e88a993bd7fe3ba81&extra=anything_media_want
参数名称 | 字段含义 | 字段类型 | 说明 |
---|---|---|---|
user_id | 用户id | string | 调用SDK透传,应用对用户的唯一标识 |
trans_id | 交易id | string | 完成观看的唯一交易ID,由Cloooud生成 |
reward_amount | 奖励数量 | int | 媒体平台配置或调用SDK传入 |
reward_name | 奖励名称 | string | 媒体平台配置或调用SDK传入 |
prime_rit | 广告位id | string | 广告位id |
sign | 签名 | string | 由key和trans_id生成的报文签名 |
extra | 用户自定义 | string | 即customData,调用SDK传入并透传,如无需要则为空 |
sign签名规则说明
①开发者收到Cloooud服务器激励回调时,可以通过sign对参数进行校验; ②签名生成规则为:用trans id 和 m-key 拼接为 string,用sha256 算法生成string;
Python 示例
import hashlib
if __name__ == "__main__":
trans_id = "6FEB23ACB0374985A2A52D282EDD5361u6643"
m-key = "2426177315863edd099aa9ba13e6a996"
check_sign_raw = "%s:%s" % (m-key, trans_id)
sign = hashlib.sha256(check_sign_raw).hexdigest()
java示例
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Main {
public static void main(String[] args) throws NoSuchAlgorithmException {
String transId = "6FEB23ACB0374985A2A52D282EDD5361u6643";
String mKey = "2426177315863edd099aa9ba13e6a996";
String checkSignRaw = mKey + ":" + transId;
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(checkSignRaw.getBytes(StandardCharsets.UTF_8));
String sign = bytesToHex(hash);
System.out.println(sign);
}
private static final char[] HEX_ARRAY = "0123456789abcdef".toCharArray();
private static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int i = 0; i < bytes.length; i++) {
int v = bytes[i] & 0xff;
hexChars[i * 2] = HEX_ARRAY[v >>> 4];
hexChars[i * 2 + 1] = HEX_ARRAY[v & 0x0f];
}
return new String(hexChars);
}
}
约定返回参数
字段名称 | 字段定义 | 字段类型 | 备注 |
---|---|---|---|
is_verify | 校验结果 | bool | 判定结果,是否发放奖励 |
reason | 失败原因 | int | 当奖励发放失败时上传对应的错误码,并会透传给SDK客户端 |
注意:按照SDK要求需要服务器判断的回调url是一个GET请求,默认返回的是一个json字符串。
示例代码
{
"is_verify": true,
"reason" : 0
}
问题排查定位
①开启聚合的服务端奖励验证功能后,请不要在第三方ADN重复配置这些代码位的服务端验证,否则可能会导致奖励发放出现问题; ② 多阶奖励发放目前仅ADN形式支持; ③ 当rewardVerify返回为false时,对应的errorCode为50001/50002,可提供对应的广告位ID及trans_id(交易ID)及发生的具体时间反馈给技术支持同学进行排查。错误码获取可参照如下代码或者通过抓包查询reward字段下返回的错误码来获取;
- (void)rewardedVideoAdServerRewardDidFail:(CloooudRewardedVideoAd *)rewardedVideoAd error:(nonnull NSError *)error {
NSInteger errorCode = error.code;
NSString *errorMsg = error.userInfo[NSLocalizedDescriptionKey];
NSLog(@"%s error = %@",__func__,error);
}
错误码说明
字段名称 | 字段定义 |
---|---|
20000 | 校验成功 |
40001 | 请求报文解析失败 |
40002 | 奖励回调未配置 |
50001 | 请求媒体服务端失败 |
50002 | 服务端处理异常 |